package com.hbx.service;

import com.hbx.dto.AdminLoginDto;
import com.hbx.dto.user.CheckPwdDto;
import com.hbx.dto.user.UpdatePwdDto;
import com.hbx.dto.user.UpdateUserDto;
import com.hbx.dto.user.UserAuthDto;
import com.hbx.dto.user.UserInsertDto;
import com.hbx.dto.user.UserRankDto;
import com.hbx.dto.user.UserRegisterDto;
import com.hbx.dto.user.UserSearchDto;
import com.hbx.model.User;
import com.baomidou.mybatisplus.extension.service.IService;
import com.hbx.utils.Result;
import com.hbx.vo.UserInfoVo;
import com.hbx.vo.login.AuthResultVo;
import com.hbx.vo.SearchUserVo;
import org.springframework.web.multipart.MultipartFile;

/**
 * <p>
 *  服务类
 * </p>
 *
 * @author hbx
 * @since 2021-11-26
 */
public interface UserService extends IService<User> {

    /**
     * 检查用户名是否存在
     * @param username
     * @return
     */
    Result<Integer> checkUsernameExist(String username);

    /**
     * 用户注册
     * @param user
     * @return
     */
    Result register(UserRegisterDto user);

    /**
     * 激活用户
     * @param code
     * @return
     */
    Result activeUser(String code);

    /**
     * 用户模块的条件查询
     * @param userSearch
     * @return
     */
    Result<SearchUserVo> pageListByQuery(UserSearchDto userSearch);

    /**
     * 检查邮箱是否存在
     * @param email
     * @return
     */
    Result checkEmailExist(String email);

    /**
     * 后台添加用户
     * @param userdto
     * @return
     */
    Result add(UserInsertDto userdto);

    /**
     * 后台修改用户
     * @param userdto
     * @return
     */
    Result update(UserInsertDto userdto);

    /**
     * 重置用户密码
     * @param userId
     * @return
     */
    Result resetPwd(Integer userId);

    /**
     * 后台登陆成功
     * @param loginUser
     * @param vo
     * @return
     */
    void loginSuccess(User loginUser,AuthResultVo vo);

    /**
     * 用户名密码登录-
     * @param user
     * @return
     */
    User usernameLogin(AdminLoginDto user);

    /**
     * 邮箱登录
     * @param user
     * @return
     */
    User emailLogin(AdminLoginDto user);

    /**
     * 获得我的详细信息
     * @return
     */
    void getMyInfo(Result<UserInfoVo> r);

    /**
     * 修改用户头像
     * @param file
     * @param r
     */
    void updateAvator(MultipartFile file, Result r) throws Exception;

    /**
     * 修改用户信息
     * @param updateUserDto
     * @param r
     */
    void updateInfo(UpdateUserDto updateUserDto, Result r);

    /**
     * 删除用户信息
     * @param userId
     * @param r
     */
    void deleteUser(Integer userId, Result r);

    /**
     * 给用户授权
     * @param userAuthDto
     */
    void saveRoleToUser(UserAuthDto userAuthDto, Result r);

    /**
     * 检查旧密码是否正确
     * @param dto
     * @param r
     */
    void checkOldPassword(CheckPwdDto dto, Result r);

    /**
     * 修改密码
     * @param dto
     * @param r
     */
    void updatePassword(UpdatePwdDto dto, Result r);

    /**
     * 给用户授衔
     * @param dto
     * @param r
     */
    void saveRankToUser(UserRankDto dto, Result r);

    /**
     * 获得用户已有头衔id
     * @param userId
     * @param r
     */
    void getUserHasRankId(Integer userId, Result r);

    /**
     * 获得用户信息
     * @param userId
     * @param r
     */
    void getUserInfo(Integer userId, Result<UserInfoVo> r);

    /**
     * 用户退出登录
     * @param token
     * @param r
     */
    void logOut(String token, Result r);
}
